package com.example.controller.exception;

import com.example.entity.RestBean;
import jakarta.validation.ValidationException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 用于接口参数校验处理的控制器
 */
@Slf4j
@RestControllerAdvice
public class ValidationController {
    /**
     * 处理验证异常，与SpringBoot保持一致，校验不通过打印警告信息，而不是直接抛出异常
     * 此方法主要用于捕获验证异常（ValidationException），并以日志的形式记录错误详情，
     * 同时返回给客户端一个包含错误信息的响应，以避免因参数错误导致的系统中断
     *
     * @param exception 验证异常，包含验证失败的详细信息
     * @return 校验结果，返回一个表示失败的RestBean对象，包含错误代码和消息
     */
    @ExceptionHandler(ValidationException.class)
    public RestBean<Void> validateError(ValidationException exception) {
        // 记录验证异常的详细信息，包括异常类名和错误消息，以便开发者定位问题
        log.warn("Resolved [{}: {}]", exception.getClass().getName(), exception.getMessage());
        // 返回一个表示请求参数有误的响应，HTTP状态码为400
        return RestBean.failure(400, "请求参数有误");
    }
}
